Learn in 10 minutes

Learn in 10 minutes

Изучите Java за 10 минут

Java - это высокоуровневый объектно-ориентированный язык программирования, известный своим принципом “напиши один раз, запусти везде”. Этот учебник охватывает возможности Java 21+, помогая быстро изучить основы Java.

1. Написание первой программы на Java

Программы Java организованы в классы. Начнем с простой программы. Создайте файл с именем HelloWorld.java:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Скомпилируйте и запустите программу:

javac HelloWorld.java
java HelloWorld

Результат будет:

Hello, World!

Эта простая программа демонстрирует базовую структуру Java. Каждая программа Java должна иметь хотя бы один класс, а метод main является точкой входа.

2. Базовый синтаксис

Синтаксис Java структурирован и следует определенным правилам:

// Это однострочный комментарий
/* Это 
   многострочный комментарий */

public class BasicSyntax {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}

Основные правила синтаксиса в Java:

  • Чувствительность к регистру: Java чувствителен к регистру. Variable и variable отличаются.
  • Имена классов: Должны начинаться с заглавной буквы и следовать конвенции CamelCase.
  • Имена методов: Должны начинаться со строчной буквы и следовать конвенции camelCase.
  • Точка с запятой: Каждое выражение должно заканчиваться точкой с запятой ;.
  • Фигурные скобки: Блоки кода определяются фигурными скобками {}.
  • Комментарии: Однострочные комментарии используют //, многострочные /* */.

3. Переменные и типы данных

Java является статически типизированным языком, что означает, что вы должны явно объявлять типы переменных.

Правила именования переменных:

  • Должны начинаться с буквы, подчеркивания _ или знака доллара $.
  • Могут содержать буквы, цифры, подчеркивания и знаки доллара.
  • Не могут быть ключевыми словами Java.
  • Должны следовать конвенции camelCase.

Примитивные типы данных Java:

  • byte: 8-битное целое число со знаком (-128 до 127)
  • short: 16-битное целое число со знаком (-32,768 до 32,767)
  • int: 32-битное целое число со знаком (-2^31 до 2^31-1)
  • long: 64-битное целое число со знаком (-2^63 до 2^63-1)
  • float: 32-битная плавающая точка
  • double: 64-битная плавающая точка
  • boolean: true или false
  • char: 16-битный символ Unicode
public class DataTypes {
    public static void main(String[] args) {
        // Целочисленные типы
        byte age = 25;
        short year = 2024;
        int population = 1000000;
        long distance = 93000000L; // суффикс L для long
        
        // Типы с плавающей точкой
        float temperature = 36.5f; // суффикс f для float
        double pi = 3.14159265359;
        
        // Логический тип и символ
        boolean isActive = true;
        char grade = 'A';
        
        // Строка (ссылочный тип)
        String name = "Alice";
        
        System.out.println("Name: " + name + ", Age: " + age);
    }
}

3.1 Операции со строками

Строки в Java являются объектами, а не примитивными типами:

public class StringExample {
    public static void main(String[] args) {
        String text = "Java Programming";
        
        System.out.println("Length: " + text.length());
        System.out.println("Uppercase: " + text.toUpperCase());
        System.out.println("Lowercase: " + text.toLowerCase());
        System.out.println("Character at index 0: " + text.charAt(0));
        System.out.println("Substring: " + text.substring(0, 4));
        System.out.println("Contains 'Java': " + text.contains("Java"));
        
        // Конкатенация строк
        String greeting = "Hello, " + "World!";
        System.out.println(greeting);
        
        // Форматирование строк
        String formatted = String.format("Pi is approximately %.2f", 3.14159);
        System.out.println(formatted);
    }
}

4. Массивы и коллекции

4.1 Массивы

Массивы хранят несколько значений одного типа:

public class ArrayExample {
    public static void main(String[] args) {
        // Объявление и инициализация массива
        int[] numbers = {1, 2, 3, 4, 5};
        String[] fruits = new String[3];
        fruits[0] = "apple";
        fruits[1] = "banana";
        fruits[2] = "orange";
        
        // Доступ к элементам массива
        System.out.println("First number: " + numbers[0]);
        System.out.println("Array length: " + numbers.length);
        
        // Итерация по массивам
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("Number " + i + ": " + numbers[i]);
        }
        
        // Расширенный цикл for (for-each)
        for (String fruit : fruits) {
            System.out.println("Fruit: " + fruit);
        }
        
        // Многомерные массивы
        int[][] matrix = {{1, 2}, {3, 4}, {5, 6}};
        System.out.println("Matrix element [1][1]: " + matrix[1][1]);
    }
}

4.2 Коллекции

Java Collections Framework предоставляет динамические структуры данных:

import java.util.*;

public class CollectionsExample {
    public static void main(String[] args) {
        // ArrayList (динамический массив)
        ArrayList<String> names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");
        names.remove("Bob");
        System.out.println("Names: " + names);
        
        // HashMap (пары ключ-значение)
        HashMap<String, Integer> ages = new HashMap<>();
        ages.put("Alice", 25);
        ages.put("Bob", 30);
        ages.put("Charlie", 35);
        System.out.println("Alice's age: " + ages.get("Alice"));
        
        // HashSet (уникальные элементы)
        HashSet<Integer> uniqueNumbers = new HashSet<>();
        uniqueNumbers.add(1);
        uniqueNumbers.add(2);
        uniqueNumbers.add(2); // Дубликат, не будет добавлен
        uniqueNumbers.add(3);
        System.out.println("Unique numbers: " + uniqueNumbers);
        
        // Итерация по коллекциям
        for (String name : names) {
            System.out.println("Name: " + name);
        }
        
        for (Map.Entry<String, Integer> entry : ages.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

5. Операции и операторы

Java предоставляет различные операторы для разных операций:

  • Арифметические операторы: +, -, *, /, % (модуль), ++ (инкремент), -- (декремент)
  • Операторы сравнения: ==, !=, >, <, >=, <=
  • Логические операторы: && (и), || (или), ! (не)
  • Побитовые операторы: &, |, ^, ~, <<, >>, >>>
  • Операторы присваивания: =, +=, -=, *=, /=, %=
public class OperatorsExample {
    public static void main(String[] args) {
        int a = 10, b = 3;
        
        // Арифметические операции
        System.out.println("Addition: " + (a + b));
        System.out.println("Subtraction: " + (a - b));
        System.out.println("Multiplication: " + (a * b));
        System.out.println("Division: " + (a / b));
        System.out.println("Modulus: " + (a % b));
        
        // Инкремент и декремент
        System.out.println("Pre-increment: " + (++a));
        System.out.println("Post-decrement: " + (b--));
        
        // Операции сравнения
        System.out.println("Equal: " + (a == b));
        System.out.println("Not equal: " + (a != b));
        System.out.println("Greater than: " + (a > b));
        
        // Логические операции
        boolean x = true, y = false;
        System.out.println("AND: " + (x && y));
        System.out.println("OR: " + (x || y));
        System.out.println("NOT: " + (!x));
        
        // Операции присваивания
        int c = 5;
        c += 3; // c = c + 3
        System.out.println("After += 3: " + c);
    }
}

6. Поток управления

6.1 Условные операторы

public class ConditionalExample {
    public static void main(String[] args) {
        int score = 85;
        
        // оператор if-else
        if (score >= 90) {
            System.out.println("Grade: A");
        } else if (score >= 80) {
            System.out.println("Grade: B");
        } else if (score >= 70) {
            System.out.println("Grade: C");
        } else {
            System.out.println("Grade: F");
        }
        
        // Тернарный оператор
        String result = (score >= 60) ? "Pass" : "Fail";
        System.out.println("Result: " + result);
        
        // оператор switch
        char grade = 'B';
        switch (grade) {
            case 'A':
                System.out.println("Excellent!");
                break;
            case 'B':
                System.out.println("Good!");
                break;
            case 'C':
                System.out.println("Average");
                break;
            default:
                System.out.println("Invalid grade");
        }
    }
}

6.2 Циклы

public class LoopExample {
    public static void main(String[] args) {
        // цикл for
        System.out.println("For loop:");
        for (int i = 0; i < 5; i++) {
            System.out.println("Iteration: " + i);
        }
        
        // Расширенный цикл for (for-each)
        System.out.println("\nFor-each loop:");
        int[] numbers = {1, 2, 3, 4, 5};
        for (int num : numbers) {
            System.out.println("Number: " + num);
        }
        
        // цикл while
        System.out.println("\nWhile loop:");
        int count = 0;
        while (count < 3) {
            System.out.println("Count: " + count);
            count++;
        }
        
        // цикл do-while
        System.out.println("\nDo-while loop:");
        int x = 0;
        do {
            System.out.println("X: " + x);
            x++;
        } while (x < 3);
        
        // break и continue
        System.out.println("\nBreak and continue:");
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                break; // Выйти из цикла
            }
            if (i % 2 == 0) {
                continue; // Пропустить четные числа
            }
            System.out.println("Odd number: " + i);
        }
    }
}

7. Методы (функции)

Методы в Java - это функции, которые принадлежат классам:

public class MethodExample {
    
    // Метод без параметров и без возвращаемого значения
    public static void greet() {
        System.out.println("Hello, World!");
    }
    
    // Метод с параметрами и возвращаемым значением
    public static int add(int a, int b) {
        return a + b;
    }
    
    // Метод с несколькими параметрами
    public static String formatName(String firstName, String lastName) {
        return firstName + " " + lastName;
    }
    
    // Перегрузка метода (одинаковое имя, разные параметры)
    public static int multiply(int a, int b) {
        return a * b;
    }
    
    public static double multiply(double a, double b) {
        return a * b;
    }
    
    // Переменные аргументы (varargs)
    public static int sum(int... numbers) {
        int total = 0;
        for (int num : numbers) {
            total += num;
        }
        return total;
    }
    
    public static void main(String[] args) {
        greet();
        
        int result = add(5, 3);
        System.out.println("Addition result: " + result);
        
        String fullName = formatName("John", "Doe");
        System.out.println("Full name: " + fullName);
        
        System.out.println("Multiply integers: " + multiply(4, 5));
        System.out.println("Multiply doubles: " + multiply(2.5, 3.0));
        
        System.out.println("Sum of multiple numbers: " + sum(1, 2, 3, 4, 5));
    }
}

8. Объектно-ориентированное программирование

8.1 Классы и объекты

public class Person {
    // Переменные экземпляра (поля)
    private String name;
    private int age;
    private String email;
    
    // Конструктор
    public Person(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }
    
    // Конструктор по умолчанию
    public Person() {
        this("Unknown", 0, "");
    }
    
    // Методы-геттеры
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
    
    public String getEmail() {
        return email;
    }
    
    // Методы-сеттеры
    public void setName(String name) {
        this.name = name;
    }
    
    public void setAge(int age) {
        if (age >= 0) {
            this.age = age;
        }
    }
    
    public void setEmail(String email) {
        this.email = email;
    }
    
    // Метод экземпляра
    public void introduce() {
        System.out.println("Hi, I'm " + name + ", " + age + " years old.");
    }
    
    // Метод с логикой
    public boolean isAdult() {
        return age >= 18;
    }
    
    // Метод toString (переопределяя toString Object)
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + ", email='" + email + "'}";
    }
    
    public static void main(String[] args) {
        // Создание объектов
        Person person1 = new Person("Alice", 25, "[email protected]");
        Person person2 = new Person();
        
        // Использование методов
        person1.introduce();
        System.out.println("Is adult: " + person1.isAdult());
        
        person2.setName("Bob");
        person2.setAge(17);
        person2.setEmail("[email protected]");
        
        System.out.println(person1.toString());
        System.out.println(person2.toString());
    }
}

Этот всеобъемлющий учебник Java охватывает основные концепции, необходимые для начала работы с программированием на Java. Строгая типизация языка, объектно-ориентированные возможности и обширная стандартная библиотека делают его мощным для создания надежных приложений. Практикуйтесь с этими примерами и экспериментируйте с кодом для углубления понимания концепций программирования на Java.